package com.room.search.domain.enumeration.city;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum CityStatusEnum implements ApiStatus{
    /**
     * 请求成功.
     */
    OK("200"),
    /**
     * 请求成功，但你查询的地区暂时没有你需要的数据。
     */
    NO_DATA("204"),
    /**
     * 请求错误，可能包含错误的请求参数或缺少必选的请求参数。
     */
    PARAMETER_INVALID("400"),
    /**
     * 认证失败，可能使用了错误的KEY、数字签名错误、KEY的类型错误（如使用SDK的KEY去访问Web API）。
     */
    KEY_INVALID("401"),
    /**
     * 超过访问次数或余额不足以支持继续访问服务，你可以充值、升级访问量或等待访问量重置。
     */
    NO_CONTINUE("402"),
    /**
     * 无访问权限，可能是绑定的PackageName、BundleID、域名IP地址不一致，或者是需要额外付费的数据。
     */
    PERMISSION_DENIED("403"),
    /**
     * 查询的数据或地区不存在。
     */
    UNKNOWN_LOCATION("404"),
    /**
     * 超过限定的QPM（每分钟访问次数），请参考QPM说明
     */
    TOO_FAST("429"),
    /**
     * 无响应或超时，接口服务异常请联系和风天气.
     */
    INTERNAL_ERROR("500"),
    UNKNOWN("999");

    private String code;

    CityStatusEnum(String code) {
        this.code = code;
    }

    @Override
    public boolean isOk() {
        return CityStatusEnum.OK.getCode().equals(this.getCode());
    }

    @JsonValue
    @Override
    public String getCode() {
        return code;
    }

    @JsonCreator
    public static CityStatusEnum fromValue(String code) {
        for (CityStatusEnum v7StatusEnum : CityStatusEnum.values()) {
            if (v7StatusEnum.code.equals(code)) {
                return v7StatusEnum;
            }
        }
        return UNKNOWN;
    }
}
